package org.shj.spark.sql

import org.apache.spark.sql.SparkSession

/**
 * 第一：在目前企业级大数据Spark开发的时候绝大多数情况下是采用Hive作为数据仓库的， Spark提供了Hive的支持功能 ，Spark
 * 通过HiveContext可以直接操作Hive中的数据；基于HiveContext我们可以使用sql/hql两种方式 编写SQL语句对Hive进行操作，
 * 包括创建表，删除表、往表里导入数据以用SQL语法构造各种SQL语句进行CRUD 。
 * 第二： 我们也可以直接通过saveAsTable的方式直接把Dataset中的数据保存到Hive数据仓库
 * 第三： 可以直接通过HiveContext.table方法来直接加载Hive中的表而生成Dataset
 * 
 * 本程序需打包后在Spark 集群下运行
 * ./bin/spark-submit --master spark://ubuntu1:7077  --class org.shj.spark.sql.SparkSQLHive /home/shj/SparkHive.jar
 */
object SparkHiveDemo {
  def main(args: Array[String]): Unit = {
    
    val ss = SparkSession.builder().appName("SparkSQLHive").enableHiveSupport().getOrCreate()
    
    ss.sql("use spark_hive")
    ss.sql("DROP TABLE IF EXISTS emp")
    ss.sql("create table emp(" +
          	 "name string," + 
          	 "age int," + 
          	 "salary int," + 
          	 "deptCd string" + 
           ") ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' lines terminated by '\n'")
    ss.sql("LOAD DATA LOCAL INPATH '/opt/programs/apache-hive-1.2.1-bin/bin/test/hive_emp.txt' INTO TABLE emp")
    
    val df = ss.sql("select * from emp where salary > 6000")
    df.rdd.collect.foreach(println)
    
    val tblDf = ss.sqlContext.table("emp") //直接把表转化成 DataFrame，然后进行后续的机器学习，图计算等
    
    ss.close()
    
  
  }
}